<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>[1.19]-DI服务速查：各资源服务一览表 | PhalApi(π框架) - PHP轻量级开源接口框架 - 助你创造价值！</title>
    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
    <meta content="yes" name="apple-mobile-web-app-capable">
    <meta content="black" name="apple-mobile-web-app-status-bar-style">
    <meta content="telephone=no" name="format-detection">
    <meta content="email=no" name="format-detection">
    <meta name="Author" content="PhalApi,ecitlm,dogstar">
    <meta name="description" content="[1.19]-DI服务速查：各资源服务一览表，PhalApi是一个PHP轻量级开源接口框架，致力于快速开发接口服务。支持HTTP/SOAP/RPC等协议，可用于搭建接口/微服务/RESTful接口/Web Services。我们不断更新，保持生气；为接口负责，为开源负责！并承诺永久免费！">
    <meta name="keywords" content="PhalApi,phalapi,phalapi接口开发,后台接口开发,后台接口开发框架,接口开发,接口框架,开源接口框架,PHP后台接口开发,PHP接口开发,PHP接口框架,PHP后台接口框架,phalapi官网,PHP接口框架,php接口开发框架,php接口开发,php web框架,π框架,π开发框架,π接口框架,π接口开发框架,api接口,php接口,,PHP接口框架,phalapi文档,phalapi wiki,PhalApi文档,phalapi在线文档,phalapi官方文档">

    <link rel="stylesheet" type="text/css" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" media="screen">
    <link rel="stylesheet" type="text/css" href="https://cdn.bootcss.com/font-awesome/4.7.0/css/font-awesome.css" media="screen">
    <link rel="stylesheet" href="../css/main.css" />
    <link rel="stylesheet" href="../css/loading_bar.css" />
    <link rel="icon" href="http://webtools.qiniudn.com/dog_catch.png" type="image/x-icon" />
    <script src="../js/pace.min.js"></script>
	
	<!-- 代码高亮 -->
	<link rel="stylesheet" href="../css/highlight.min.css">
	<script src="../js/highlight.min.js"></script>
	<script>hljs.initHighlightingOnLoad();</script>
    
</head>

<body>
    <!-- navbar start -->
    <div class="navbar navbar-default navbar-fixed-top" id="mainnav" role="navigation">
        <div class="container">
            <div class="navbar-header">
                <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target=".navbar-collapse">
                    <span class="sr-only">Toggle navigation</span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
                <a class="navbar-brand website_name" href="/"><!-- <span>PhalApi</span> --><strong>PhalApi</strong></a>
            </div>
            <div class="navbar-collapse collapse" aria-expanded="false" style="height: 1px;">
                <ul class="nav navbar-nav navbar-right" id="nav_bar">
                    <li><a href="/"><span class="glyphicon glyphicon-home"></span></a></li>
                    <li><a href="http://qa.phalapi.net/">社区</a></li>
                    <li><a href="/download.html">下载</a></li>
                    <li class="active"><a href="/wikis/">文档</a></li>
                    <li><a href="http://www.ituring.com.cn/book/2405">书籍</a></li>
                    <li><a href="http://demo.phalapi.net/">体验</a></li>
                    <li><a href="/about.html">关于</a></li>
                    <li><a href="/donate.html">贡献</a></li>
                    <li><a href="/wikis/en/">English</a></li>
                </ul>
            </div>
            <!--/.nav-collapse -->
        </div>
    </div>
    <!-- navbar end -->


    <div id="content">
        <div class="container">
            <div class="row row-md-flex row-md-flex-wrap">
                <h4><a href="/wikis/%5B1.18%5D-%E5%BF%AB%E9%80%9F%E5%87%BD%E6%95%B0%EF%BC%9A%E4%BA%BA%E6%80%A7%E5%8C%96%E7%9A%84%E5%85%B3%E6%80%80.html">上一章</a>   <a href="/wikis/">文档首页</a>   <a href="/wikis/%5b1.20%5d-DB%e6%93%8d%e4%bd%9c%ef%bc%9a%e6%95%b0%e6%8d%ae%e5%ba%93%e5%9f%ba%e6%9c%ac%e6%93%8d%e4%bd%9c%e9%80%9f%e6%9f%a5.html">下一章</a></h4>
<hr />
<p>“完成，好过完美。”  -- 脸谱书文化之一  </p>
<h2>1.19.1 一览表</h2>
<table class="table table-bordered">
<thead>
<tr>
<th>变量名称</th>
<th>是否启动时自动注册</th>
<th>是否必须</th>
<th>接口/类</th>
<th>作用说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>loader</td>
<td>否</td>
<td>是</td>
<td><a href="http://www.phalapi.net/docs/classes/PhalApi_Loader.html">PhalApi_Loader</a></td>
<td>自动加载：负责PEAR风格下类的自动加载，需要手动注册，指定项目路径</td>
</tr>
<tr>
<td>config</td>
<td>否</td>
<td>是</td>
<td><a href="http://www.phalapi.net/docs/classes/PhalApi_Config.html">PhalApi_Config</a></td>
<td>配置：负责项目配置的读取，需要手动注册，指定存储媒介，默认是<a href="http://www.phalapi.net/docs/classes/PhalApi_Config_File.html">PhalApi_Config_File</a></td>
</tr>
<tr>
<td>logger</td>
<td>否</td>
<td>是</td>
<td><a href="http://www.phalapi.net/docs/classes/PhalApi_Logger.html">PhalApi_Logger</a></td>
<td>日记纪录：负责日记的写入，需要手动注册，指定日记级别和存储媒介，默认是<a href="http://www.phalapi.net/docs/classes/PhalApi_Logger_File.html">PhalApi_Logger_File</a></td>
</tr>
<tr>
<td>request</td>
<td>是</td>
<td>是</td>
<td><a href="http://www.phalapi.net/docs/classes/PhalApi_Request.html">PhalApi_Request</a></td>
<td>接口参数请求：用于收集接口请求的参数</td>
</tr>
<tr>
<td>response</td>
<td>是</td>
<td>是</td>
<td><a href="http://www.phalapi.net/docs/classes/PhalApi_Response.html">PhalApi_Response</a></td>
<td>结果响应：用于输出返回给客户端的结果，默认为<a href="http://www.phalapi.net/docs/classes/PhalApi_Response_Json.html">PhalApi_Response_Json</a></td>
</tr>
<tr>
<td>notorm</td>
<td>否</td>
<td>推荐</td>
<td><a href="http://www.phalapi.net/docs/classes/PhalApi_DB_NotORM.html">PhalApi_DB_NotORM</a></td>
<td>数据操作：基于NotORM的DB操作，需要手动注册，指定数据库配置</td>
</tr>
<tr>
<td>cache</td>
<td>否</td>
<td>推荐</td>
<td><a href="http://www.phalapi.net/docs/classes/PhalApi_Cache.html">PhalApi_Cache</a></td>
<td>缓存：实现缓存读写，需要手动注册，指定缓存</td>
</tr>
<tr>
<td>filter</td>
<td>否</td>
<td>推荐</td>
<td><a href="http://www.phalapi.net/docs/classes/PhalApi_Filter.html">PhalApi_Filter</a></td>
<td>拦截器：实现签名验证、权限控制等操作</td>
</tr>
<tr>
<td>crypt</td>
<td>否</td>
<td>否</td>
<td><a href="http://www.phalapi.net/docs/classes/PhalApi_Crypt.html">PhalApi_Crypt</a></td>
<td>对称加密：实现对称加密和解密，需要手动注册</td>
</tr>
<tr>
<td>curl</td>
<td>否</td>
<td>否</td>
<td><a href="http://www.phalapi.net/docs/classes/PhalApi_CUrl.html">PhalApi_CUrl</a></td>
<td>CURL请求类：通过curl实现的快捷方便的接口请求类，需要手动注册</td>
</tr>
<tr>
<td>cookie</td>
<td>否</td>
<td>否</td>
<td><a href="http://www.phalapi.net/docs/classes/PhalApi_Cookie.html">PhalApi_Cookie</a></td>
<td>COOKIE的操作</td>
</tr>
<tr>
<td>tracer</td>
<td>是</td>
<td>是</td>
<td><a href="http://www.phalapi.net/docs/classes/PhalApi_Helper_Tracer.html">PhalApi_Helper_Tracer</a></td>
<td>内置的全球追踪器，支持自定义节点标识（1.4.0及上以版本支持）</td>
</tr>
<tr>
<td>debug</td>
<td>否</td>
<td>否</td>
<td>boolean</td>
<td>应用级的调试开关，通常可从配置读取，为true时开启调试模式</td>
</tr>
<tr>
<td>_formatterArray</td>
<td>否</td>
<td>否</td>
<td><a href="http://www.phalapi.net/docs/classes/PhalApi_Request_Formatter_Array.html">PhalApi_Request_Formatter_Array</a></td>
<td>数组格式化服务（系统内部使用）</td>
</tr>
<tr>
<td>_formatterBoolean</td>
<td>否</td>
<td>否</td>
<td><a href="http://www.phalapi.net/docs/classes/PhalApi_Request_Formatter_Boolean.html">PhalApi_Request_Formatter_Boolean</a></td>
<td>布尔值格式化服务（系统内部使用）</td>
</tr>
<tr>
<td>_formatterCallable</td>
<td>否</td>
<td>否</td>
<td><a href="http://www.phalapi.net/docs/classes/PhalApi_Request_Formatter_Callable.html">PhalApi_Request_Formatter_Callable</a></td>
<td>回调格式化服务（系统内部使用）</td>
</tr>
<tr>
<td>_formatterDate</td>
<td>否</td>
<td>否</td>
<td><a href="http://www.phalapi.net/docs/classes/PhalApi_Request_Formatter_Date.html">PhalApi_Request_Formatter_Date</a></td>
<td>日期格式化服务（系统内部使用）</td>
</tr>
<tr>
<td>_formatterEnum</td>
<td>否</td>
<td>否</td>
<td><a href="http://www.phalapi.net/docs/classes/PhalApi_Request_Formatter_Enum.html">PhalApi_Request_Formatter_Enum</a></td>
<td>枚举格式化服务（系统内部使用）</td>
</tr>
<tr>
<td>_formatterFile</td>
<td>否</td>
<td>否</td>
<td><a href="http://www.phalapi.net/docs/classes/PhalApi_Request_Formatter_File.html">PhalApi_Request_Formatter_File</a></td>
<td>上传文件格式化服务（系统内部使用）</td>
</tr>
<tr>
<td>_formatterFloat</td>
<td>否</td>
<td>否</td>
<td><a href="http://www.phalapi.net/docs/classes/PhalApi_Request_Formatter_Float.html">PhalApi_Request_Formatter_Float</a></td>
<td>浮点数格式化服务（系统内部使用）</td>
</tr>
<tr>
<td>_formatterInt</td>
<td>否</td>
<td>否</td>
<td><a href="http://www.phalapi.net/docs/classes/PhalApi_Request_Formatter_Int.html">PhalApi_Request_Formatter_Int</a></td>
<td>整数格式化服务（系统内部使用）</td>
</tr>
<tr>
<td>_formatterString</td>
<td>否</td>
<td>否</td>
<td><a href="http://www.phalapi.net/docs/classes/PhalApi_Request_Formatter_String.html">PhalApi_Request_Formatter_String</a></td>
<td>字符串格式化服务（系统内部使用）</td>
</tr>
</tbody>
</table>
<h2>1.19.2 DI服务是否已注册的判断误区</h2>
<h3>(1)错误的判断方法</h3>
<p>当需要判断一个DI服务是否已被注册，出于常识会这样判断：  </p>
<pre><code class="language-php">if (isset(DI()-&gt;cache)) {</code></pre>
<p>但这样的判断永远为false，不管注册与否。  </p>
<p>追其原因在于，DI类使用了魔法方法的方式来提供类成员属性，并存放于PhalApi_DI::$data中。  </p>
<p>这就导致了如果直接使用isset(DI()-&gt;cache)的话，首先不会触发魔法方法 PhalApi_DI::__get($name)的调用，其次也确实没有PhalApi_DI::$cache这个成员属性，最终判断是否存在时都为false。  </p>
<p>简单来说，以下两种判断，永远都为false：  </p>
<pre><code class="language-php">//永远为false
var_dump(isset(DI()-&gt;XXX));
var_dump(!empty(DI()-&gt;XXX));</code></pre>
<h3>(2)正确判断的写法：先获取，再判断</h3>
<p>正确的用法应该是：  </p>
<pre><code class="language-php">//先获取，再判断
$XXX = DI()-&gt;XXX;
var_dump(isset($XXX));
var_dump(!empty($XXX));</code></pre>
<p>这里，可能会对大家带来一定的困惑，所以在这里特别进行说明。也对框架中这一点不合理的设计深感抱歉。  </p>
<hr />
<h4><a href="/wikis/%5B1.18%5D-%E5%BF%AB%E9%80%9F%E5%87%BD%E6%95%B0%EF%BC%9A%E4%BA%BA%E6%80%A7%E5%8C%96%E7%9A%84%E5%85%B3%E6%80%80.html">上一章</a>   <a href="/wikis/">文档首页</a>   <a href="/wikis/%5b1.20%5d-DB%e6%93%8d%e4%bd%9c%ef%bc%9a%e6%95%b0%e6%8d%ae%e5%ba%93%e5%9f%ba%e6%9c%ac%e6%93%8d%e4%bd%9c%e9%80%9f%e6%9f%a5.html">下一章</a></h4><div style="float: left">
<h4>
<a href="http://qa.phalapi.net/">还有疑问？欢迎到社区提问！</a>
</h4>
</div>
            </div>
        </div>
    </div>

 <!-- 广告位 -->
<div class="grid-wrapper desktop-only">
	<p align="center">
		<a href="http://7xiz2f.com1.z0.glb.clouddn.com/%E6%88%91%E7%9A%84%E5%90%8D%E5%AD%97%E5%8F%AB%EF%BC%9A%CF%80%E6%A1%86%E6%9E%B6%20-%20PhalApi%202016%E5%B9%B4%E5%BA%A6%E5%BC%80%E6%BA%90%E6%80%BB%E7%BB%93%20-%20%E5%AE%98%E6%96%B9%E5%87%BA%E5%93%81.pdf" target="blank"><img width="950" height="100" src="http://7xiz2f.com1.z0.glb.clouddn.com/ad_20170104.png"></a>
		<a href="http://www.itran.cc/" target="blank"><img width="950" height="100" src="http://7xslqv.com1.z0.glb.clouddn.com/images/9/69/b88bc92455dc1239f9a5bf8d72929.png"></a>
		<a href="http://web-tools.phalapi.net/" target="blank"><img width="950" height="100" src="http://7xslqv.com1.z0.glb.clouddn.com/images/7/d0/88f523566c482296aecc43d185ca2.png"></a>
	</p>
</div>

        <!-- footer -->
        <div class="footer">
            <div class="link container ">
                <div class=" col-xs-7 col-sm-7 col-md-7 col-lg-7 ">
                    <h3>PhalApi (π框架)</h3>
                    <p>一个轻量级PHP开源接口框架，专注于接口服务开发，支持HTTP/SOAP/RPC协议，拥有自动生成的在线文档、多种开发语言的客户端SDK包以及可重用的扩展类库，可用于快速搭建微服务、RESTful接口或Web
                        Services。</p>
                    <!-- <p>:</p> -->
                    <span>友情链接:</span>
                    <a href="https://www.phalapi.net/" target="_blank"> PhalApi </a>
                    <a href="http://www.oschina.net/" target="_blank"> 开源中国 </a>
                    <a href="https://www.itran.cc/" target="_blank">艾翻译</a>
                    <a href="http://www.phalconphp.com/en/" target="_blank">Phalcon</a>
                    <a href="https://phpunit.de/manual/3.7/zh_cn/automating-tests.html" target="_blank">PHPUnit</a>
                    <a href="http://www.thoughtworks.com/cn/" target="_blank">ThoughtWorks</a>
                    <a href="mailto:chanzonghuang@gmail.com">友链交换</a>

                </div>
                <div class=" col-xs-5 col-sm-5 col-md-5 col-lg-5 contact_us ">
                    <h3>联系我们</h3>
                    <a href="https://github.com/phalapi/phalapi"><img src="../images/github.png" alt="github" /></a>
                    <a href="http://weibo.com/p/100808d236e99beb645bfb56ed1c37dde9b8bd?k=phalapi%E5%BC%80%E6%BA%90%E6%A1%86%E6%9E%B6&from=501&_from_=huati_topic"><img src="../images/weibo.png"  alt="weibo" /></a>
                    <a href="http://7xslqv.com1.z0.glb.clouddn.com/images/1/b0/894fde762850cb11250253f7d5ede.png"><img src="../images/zfb.png"  alt="zfb" /></a>
                    <a href="https://jq.qq.com/?_wv=1027&k=4A6reum"><img src="../images/qq.png"  alt="qq" /></a>
					<a href="http://git.oschina.net/dogstar/PhalApi"><img src="../images/git-oschina.png"  alt="git-oschina" /></a>
                </div>
                <div class="cls"></div>
                <div class="text-center copy_right"> ©2015-2017 PhalApi All Rights Reserved. <a href="http://www.miitbeian.gov.cn" target="_blank">粤ICP备15028808号</a>

				<script type="text/javascript">var cnzz_protocol = (("https:" == document.location.protocol) ? " https://" : " http://");document.write(unescape("%3Cspan id='cnzz_stat_icon_1255326144'%3E%3C/span%3E%3Cscript src='" + cnzz_protocol + "s4.cnzz.com/z_stat.php%3Fid%3D1255326144%26show%3Dpic' type='text/javascript'%3E%3C/script%3E"));</script>
                </div>
            </div>
        </div>
    </div>


    <a href="https://github.com/phalapi"><img id="gitHub_fllow" style="position: fixed; top: 0; right: 0; border: 0;z-index:9999" src="https://camo.githubusercontent.com/652c5b9acfaddf3a9c326fa6bde407b87f7be0f4/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f6f72616e67655f6666373630302e706e67" alt="Fork me on GitHub" data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_orange_ff7600.png"></a>


    <script src="../js/jquery-1.11.1.min.js"></script>
    <script src="../js/bootstrap.min.js"></script>
</body>

</html>